<?php
namespace app\api\controller\customer;


use app\api\controller\Api;
use app\common\customer\model\CustomerContact;
use app\common\customer\validate\CustomerContactValidate;
use app\common\system\logic\FormLogic;

class Contact extends Api
{
    // 追加联系联系方式
    public function append()
    {
        $post = $this->request->post();
        unset($post['id']);
        // 验证数据
        $validate = new CustomerContactValidate();
        if (!$validate->scene('create')->check($post)) {
            return error([], $validate->getError());
        }

        // 获取当前客资的所有联系方式
        $model = new  CustomerContact();
        $count = $model->where('member_id', $post['member_id'])->count();
        if ($count >=5) return error([], "联系方式不能大于5个");

        $user = $this->request->user;
        $post['operator_id'] = $user['id'];
        $rs = $model->save($post);
        if ($rs) {
            return success([], "添加联系方式成功");
        } else {
            return error([], "添加联系方式失败");
        }
    }

    // 修改联系方式
    public function save()
    {
        $post = $this->request->post();
        // 验证数据
        $validate = new CustomerContactValidate();
        if (!$validate->scene('edit')->check($post)) {
            return error([], $validate->getError());
        }

        // 获取当前客资的所有联系方式
        $model = new  CustomerContact();
        $contact = $model->where('id', $post['id'])->find();
        if (empty($contact)) return error([], "该联系方式已经不存在");
        if (empty($contact->member_id)) return error([], "该联系方式异常");
        if ($contact->member_id != $post['member_id']) return error([], "不是当前客资的联系方式");

        $rs = $contact->save($post);
        if ($rs) {
            // 核销表单token
            $formLogic = new FormLogic();
            $formLogic->removeToken($post['form_token']);

            return success([], "编辑联系方式成功");
        } else {
            return error([], "编辑联系方式失败");
        }
    }

    public function updateRole()
    {
        $post = $this->request->post();
        // 验证数据
        if (empty($post['id'])) return error([], "请选择要修改的联系方式");
        if (empty($post['role'])) return error([], "请选择要修改的角色");
        $model = new  CustomerContact();
        $contact = $model->where('id', $post['id'])->find();
        if (empty($contact)) return error([], "该联系方式已经不存在");
        if (empty($contact->member_id)) return error([], "该联系方式异常");

        $rs = $contact->save(['role' => $post['role']]);
        if ($rs) {
            return success([], "修改联系方式角色成功");
        } else {
            return error([], "修改联系方式角色失败");
        }
    }

    // 删除联系方式, 真实删除，联系方式有唯一性验证，软删除无法重新录入
    public function delete()
    {
        $post = $this->request->post();
        // 验证数据提交权限

        // 验证数据
        $validate = new CustomerContactValidate();
        if (!$validate->scene('delete')->check($post)) {
            return error([], $validate->getError());
        }

        // 获取当前客资的所有联系方式
        $model = new  CustomerContact();
        $contact = $model->where('id', $post['id'])->find();
        if (empty($contact)) return error([], "该联系方式已经不存在");
        if (empty($contact->member_id)) return error([], "该联系方式异常");

        // 验证客资权限

        // 至少保留一个联系方式
        $count = $model->where('member_id', $contact->member_id)->count();
        if ($count <= 1) {
            return error([], "至少保留一个联系方式");
        }

        $rs = $contact->force()->delete();
        if ($rs) {
            return success([], "删除联系方式成功");
        } else {
            return error([], "删除联系方式失败");
        }
    }

    // 唯一性验证
    public function unique()
    {
        $post = $this->request->post();

        if (empty($post['keyword'])) return error([], "请输入要查询的联系方式");
        $model = new  CustomerContact();
        $row = $model->where('contact', $post['keyword'])->with("member")->find();

        $result['row'] = $row ? $row : get_empty_object();
        return success($result, "获取数据成功");
    }
}